<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>



//【示例1】函数属性可以在函数结构体内定义，也可以在函数体外定义。
function f(){
    f.x=1; 						// 在函数体内定义属性
}
f.y=2; 							// 在函数体外定义属性
//【示例2】函数外定义的属性可以随时访问，但是在函数内定义的属性只有函数被调用后才可以访问。
function f(){
    f.x=1; 						// 在函数体内定义属性
    alert(f.x) 					// 返回1，在函数体内调用
    alert(f.y) 					// 返回2，在函数体内调用
}
f.y=2; 							// 在函数体外定义属性
alert(f.x) 						// 返回undefined，在函数体外调用无效
alert(f.y) 						// 返回2，在函数体外调用有效
f(); 							// 调用函数
alert(f.x) 						// 返回1
//【示例3】函数的方法与嵌套的函数不同。嵌套的函数仅能够在内部可见，而函数的方法可以在外部调用。
function f(){
    f.x=function(x){ 			// 在函数体内定义函数的方法x()
        return x
    };
    alert(f.x(4)); 				// 返回4，在函数体内调用函数的方法x()
    alert(f.y(4)); 				// 返回16，在函数体内调用函数的方法y()
}
f.y=function(y){ 				// 在函数体外定义函数的方法y()
    return y*y;
};
f();							// 调用函数f
alert(f.x(4)); 					// 返回4，在函数体外调用函数的方法x()
alert(f.y(4)); 					// 返回16，在函数体外调用函数的方法y()
//【示例4】通过静态属性设计递增变量。

function f(){						// 定义函数
    var x = 0; 						// 定义局部变量并赋值为0
    return x++;						// 希望每次调用函数时能够返回不同的值
}
for( var i = 1; i < 10; i ++ ){ 	// 循环结构中反复调用函数f
    alert( f() ); 					// 总是返回0
}

var x = 0; 							// 定义全局变量并赋值为0
function f(){						// 定义函数
    return x++;						// 希望每次调用函数时能够返回不同的值
}
for( var i = 1; i < 10; i ++ ){ 	// 循环结构中反复调用函数f
    alert( f() ); 					// 每次返回的值都不同
}

function f(){						// 定义函数
    return f.x++;					// 返回函数f的属性x的递增值
}
f.x = 0; 							// 定义函数的属性x，并初始化为0
for( var i = 1; i < 10; i ++ ){
    alert( f() );
}




</script>
</head>
<body>
</body>
</html>
